#include "bsp_pinctrl.h"

void Pinctrl_SDIOC_Init(void)
{
    stc_gpio_init_t stcGpioCfg;
    (void)GPIO_StructInit(&stcGpioCfg);

    stcGpioCfg.u16PinDrv = PIN_HIGH_DRV;
    (void)GPIO_Init(SDIOC_CK_PORT, SDIOC_CK_PIN, &stcGpioCfg);
    (void)GPIO_Init(SDIOC_CMD_PORT, SDIOC_CMD_PIN, &stcGpioCfg);
    (void)GPIO_Init(SDIOC_D0_PORT, SDIOC_D0_PIN, &stcGpioCfg);
    (void)GPIO_Init(SDIOC_D1_PORT, SDIOC_D1_PIN, &stcGpioCfg);
    (void)GPIO_Init(SDIOC_D2_PORT, SDIOC_D2_PIN, &stcGpioCfg);
    (void)GPIO_Init(SDIOC_D3_PORT, SDIOC_D3_PIN, &stcGpioCfg);
    
    /* SDIOC pins configuration */
    GPIO_SetFunc(SDIOC_CK_PORT,  SDIOC_CK_PIN,  GPIO_FUNC_9);
    GPIO_SetFunc(SDIOC_CMD_PORT, SDIOC_CMD_PIN, GPIO_FUNC_9);
    GPIO_SetFunc(SDIOC_D0_PORT,  SDIOC_D0_PIN,  GPIO_FUNC_9);
    GPIO_SetFunc(SDIOC_D1_PORT,  SDIOC_D1_PIN,  GPIO_FUNC_9);
    GPIO_SetFunc(SDIOC_D2_PORT,  SDIOC_D2_PIN,  GPIO_FUNC_9);
    GPIO_SetFunc(SDIOC_D3_PORT,  SDIOC_D3_PIN,  GPIO_FUNC_9);
}

void Pinctrl_USBFS_Init(void)
{
    stc_gpio_init_t stcGpioCfg;
    (void)GPIO_StructInit(&stcGpioCfg);

    stcGpioCfg.u16PinAttr = PIN_ATTR_ANALOG;
    (void)GPIO_Init(USBF_DM_PORT, USBF_DM_PIN, &stcGpioCfg);
    (void)GPIO_Init(USBF_DP_PORT, USBF_DP_PIN, &stcGpioCfg);
    FCG_Fcg1PeriphClockCmd(FCG1_PERIPH_USBFS, ENABLE);
}

void Pinctrl_USBHS_Init(void)
{
    stc_gpio_init_t stcGpioCfg;
    
    (void)GPIO_StructInit(&stcGpioCfg);
    
    /* USBHS work in embedded PHY */
    stcGpioCfg.u16PinAttr = PIN_ATTR_ANALOG;
    (void)GPIO_Init(USBH_DM_PORT, USBH_DM_PIN, &stcGpioCfg);
    (void)GPIO_Init(USBH_DP_PORT, USBH_DP_PIN, &stcGpioCfg);
    GPIO_OutputCmd(USBH_VBUS_PORT, USBH_VBUS_PIN, ENABLE);
    GPIO_SetPins(USBH_VBUS_PORT, USBH_VBUS_PIN);
}

void Pinctrl_SPI1_Init(void)
{
    stc_gpio_init_t stcGpioCfg;
    
    (void)GPIO_StructInit(&stcGpioCfg);
    stcGpioCfg.u16PinDrv = PIN_HIGH_DRV;
    (void)GPIO_Init(SPI1_CS_PORT, SPI1_CS_PIN, &stcGpioCfg);
    (void)GPIO_Init(SPI1_CLK_PORT, SPI1_CLK_PIN, &stcGpioCfg);
    (void)GPIO_Init(SPI1_MOSI_PORT, SPI1_MOSI_PIN, &stcGpioCfg);
    
    /* SDIOC pins configuration */
    GPIO_SetFunc(SPI1_CS_PORT,  SPI1_CS_PIN,  GPIO_FUNC_47);
    GPIO_SetFunc(SPI1_CLK_PORT, SPI1_CLK_PIN, GPIO_FUNC_40);
    GPIO_SetFunc(SPI1_MOSI_PORT,  SPI1_MOSI_PIN,  GPIO_FUNC_41);
}

void Pinctrl_LCD_Init(void)
{
    stc_gpio_init_t stcGpioCfg;
    
    (void)GPIO_StructInit(&stcGpioCfg);
    stcGpioCfg.u16PinDrv = PIN_HIGH_DRV;
    stcGpioCfg.u16PinDir = PIN_DIR_OUT;
    (void)GPIO_Init(LCD_RST_PORT, LCD_RST_PIN, &stcGpioCfg);
    (void)GPIO_Init(LCD_DC_PORT, LCD_DC_PIN, &stcGpioCfg);
    (void)GPIO_Init(LCD_BLKCTRL_PORT, LCD_BLKCTRL_PIN, &stcGpioCfg);
}
